# 代码结果：
    # 使用具体产品 1
    # 使用具体产品 2

from abc import ABC, abstractmethod

# 抽象产品类
class AbstractProduct(ABC):
    @abstractmethod
    def use(self):
        pass

# 具体产品类 1
class ConcreteProduct1(AbstractProduct):
    def use(self):
        print("使用具体产品 1")

# 具体产品类 2
class ConcreteProduct2(AbstractProduct):
    def use(self):
        print("使用具体产品 2")

# 抽象工厂类
class AbstractFactory(ABC):
    @abstractmethod
    def create_product(self) -> AbstractProduct:
        pass

# 具体工厂类 1
class ConcreteFactory1(AbstractFactory):
    def create_product(self) -> AbstractProduct:
        return ConcreteProduct1()

# 具体工厂类 2
class ConcreteFactory2(AbstractFactory):
    def create_product(self) -> AbstractProduct:
        return ConcreteProduct2()

# 客户端代码
class Client:
    def __init__(self, factory: AbstractFactory):
        self.factory = factory

    def get_product(self) -> AbstractProduct:
        return self.factory.create_product()

# 客户端使用示例
if __name__ == "__main__":
    # 使用具体工厂 1
    factory1 = ConcreteFactory1()
    client1 = Client(factory1)
    product1 = client1.get_product()
    product1.use()

    # 使用具体工厂 2
    factory2 = ConcreteFactory2()
    client2 = Client(factory2)
    product2 = client2.get_product()
    product2.use()